package com.pic.mgt.syushin.executer;

import java.io.File;

import org.springframework.dao.DataAccessException;

import com.pic.mgt.executer.IGXTypeExecutionException;
import com.pic.mgt.executer.TargetAction;
import com.pic.mgt.log.IgxLog;

public final class BatchSyushinBusinessUnitExecuter extends
										SyushinBusinessUnitExecuter {
	// (送多方新增)
	private String syushinBucketTmpPathStr;
	
	public BatchSyushinBusinessUnitExecuter(TargetAction targetAction,
			   CfmtAction cfmtAction) {
		super(targetAction, cfmtAction);
	}
	
	// (送多方新增)
	@Override
	protected void executeIGXBusinessTypeSpecify()
			throws IGXTypeExecutionException {
		
		// 執行確認檔動作
		try {
			// ********************** Log **********************
			if (IgxLog.messageLog.isDebugMode()) {
				IgxLog.messageLog.debug(this, 
						"Building Cfmt action for syushin business '{}'.", super.unit
								.getUnitName());
			}
			// ********************** Log **********************
			
			cfmtAction.build(super.business,
						     new File(syushinBucketTmpPathStr, super.business.getBusinessName()));
			
			// ********************** Log **********************
			if (IgxLog.messageLog.isDebugMode()) {
				IgxLog.messageLog.debug(this, 
						"Building Cfmt action for syushin business '{}' completed.",
						super.unit.getUnitName());
			}
			// ********************** Log **********************
		} catch (BuildCfmtFileProcessException e) {
			throw new IGXTypeExecutionException(
					"Syushin business '" + business.getUnitName() +
					"' execution failed in building Cfmt file process", e);
		}
	}
	
	@Override
	protected void updateStatusWhenExecutionSuccess()
			throws DataAccessException {
		/*
		 *  覆寫掉  BusinessUnitExecuter 的 updateStatusWhenExecutionSuccess(),原因:
		 *  (1) 將 target file 搬入 bucket temp 目錄底下時,即要做資料庫狀態更新. 不能等到
		 *      確認檔處理完才更新。因為若將 target file 搬入 bucket temp 目錄底下，而狀態
		 *      還未更新，這中間若 bucket 在進行打包時，會針測到檔案準備進行打包，但此時狀態
		 *      又非 BUSINESS_BATCH_TMP ，則打包時會寫 ERROR，這且這個檔案將不會被處理。
		 *  (2) 更新的狀態內容，是更新為 BUSINESS_BATCH_TMP，不是 BUSINESS_COMPLETED。
		 *  
		 *  所以由 target action 來做狀態更新動作。
		 */
	}
	
	// (送多方新增)
	public void setSyushinBucketTmpPathStr(String syushinBucketTmpPathStr) {
		this.syushinBucketTmpPathStr = syushinBucketTmpPathStr;
	}
	
	// (送多方刪除)
	/*@Override
	protected void insertSyushinTargetActionToDB(String apName) throws DataAccessException {
		
		 * 覆寫掉父類(SyushinBusinessUnitExecuter) 的 insertSyushinTargetActionToDB() 方法。
		 * 因為在 batch 的檔案資料，不需要新增到 target action table 中。
		 
	}*/
}
